; Select tool
M291 S4 K{"Left Tool - T0", "Right Tool - T1"} R"Choose the head where you want to change filament" P" "
if input == 0
  M568 P0 A2
  T0
else   
  M568 P1 A2
  T1

; Get unload temperature
M291 S5 J1 F250 L150 H450 R"Unloading filament" P"Enter loaded filament printing temperature"
var previous_tooltemp = input

; Unload filament (regular or cold pull)
if var.previous_tooltemp < 380
  M98 P"0:/sys/baseunload.g" T{var.previous_tooltemp} C1
else
  M98 P"0:/macros/System/Cold Pull" A{var.previous_tooltemp}

; Get load temperature
M291 S5 J1 F250 L150 H450 R"Loading filament" P"Enter new filament printing temperature"
var current_temp = input

; Load filament based on temperature difference
if var.previous_tooltemp <= var.current_temp || var.previous_tooltemp - var.current_temp <= 70
  ; Small or no temperature difference - normal load
  M98 P"0:/sys/baseload.g" T{var.current_temp} C1

elif var.previous_tooltemp - var.current_temp <= 160
  ; Medium temperature difference - ramp down while extruding
  M98 P"0:/sys/baseload.g" T{var.current_temp} C1 R1

else
  ; Large temperature difference - use intermediate filament
  M291 S5 J1 F250 L250 H300 R"Big difference between filaments temperature." P"You need intermediate filament with 250 - 300 melting temperature(e.g. Nylon).<br>Please enter temperature of intermediate filament."
  var intermediate_temp = input

  ; Load intermediate filament with ramping
  M98 P"0:/sys/baseload.g" T{var.intermediate_temp} C1 R1

  ; Cold pull the intermediate filament
  M98 P"0:/macros/System/Cold Pull" A{var.intermediate_temp}

  ; Load final filament with ramping
  M98 P"0:/sys/baseload.g" T{var.current_temp} C1 R1

; Clear filament data and show completion message
M702 P0
M291 S1 T15 R"Filament changed" P"Filament change completed successfully!"

; Reset temperatures to zero
M568 P0 S0 R0
M568 P1 S0 R0
M568 P2 S0 R0
M568 P3 S0 R0